package com.qire.manhua.view.picker;

import android.database.DataSetObservable;
import android.database.DataSetObserver;

/**
 * 选择器控件适配器
 * @param <D> 数据源类型
 */
public abstract class PickerViewAdapter<D> {

    private final DataSetObservable mObservable = new DataSetObservable();

    protected D data;

    public PickerViewAdapter(D data) {
        this.data = data;
    }

    /**
     * 用于适配的真实数据源
     * @return 数据对象，一般是容器也可以是自定义对象。
     */
    public D getData() {
        return data;
    }

    /**
     * 返回数据统计计数，这将决定用于计算控件显示数量及显示内容获取的最大下标
     * @return 数据的总长度
     */
    public abstract int getCount();

    /**
     * 获取用显示的项目数据
     * @param position 数据索引
     * @return 返回显示内容，用于控件显示对应选项信息
     */
    public abstract String getItem(int position);

    /**
     * 注册一个观察者来接收与适配器数据更改相关的回调。
     *
     * @param observer 这个 {@link DataSetObserver} 它将接收回调。
     */
    public void registerDataSetObserver(DataSetObserver observer) {
        mObservable.registerObserver(observer);
    }

    /**
     * 从与适配器数据更改相关的回调中注销观察者。
     *
     * @param observer 这个 {@link DataSetObserver} 将被取消注册。
     */
    public void unregisterDataSetObserver(DataSetObserver observer) {
        mObservable.unregisterObserver(observer);
    }

    /**
     * 如果支持此适配器的数据发生了更改，并且应该更新相关视图，则应用程序应该调用此方法。
     */
    public void notifyDataSetChanged() {
        mObservable.notifyChanged();
    }

    /**
     * 通知所附的观察者基础数据不再有效或可用。一旦调用此适配器就不再有效，并且不应该报告进一步的数据集更改。
     */
    public void notifyDataSetInvalidated() {
        mObservable.notifyInvalidated();
    }

}
